package refactortips.editors.refactorings;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.wb.swt.SWTResourceManager;

import refactortips.editors.AbstractRefactorTipsEditor;
import org.eclipse.wb.swt.ResourceManager;

public class ExtractClassEditor extends AbstractRefactorTipsEditor {

	protected final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
	
	public ExtractClassEditor() {
	}

	/**
	 * Create contents of the editor part.
	 * @param parent
	 */
	@Override
	public void createPartControl(Composite parent) {
		
		Form frmRefactoring = formToolkit.createForm(parent);
		formToolkit.paintBordersFor(frmRefactoring);
		frmRefactoring.setText("Extract Class");
		frmRefactoring.getBody().setLayout(new FillLayout(SWT.HORIZONTAL));
		
		TabFolder tabFolder = new TabFolder(frmRefactoring.getBody(), SWT.NONE);
		formToolkit.adapt(tabFolder);
		formToolkit.paintBordersFor(tabFolder);
		
		ScrolledComposite sc = new ScrolledComposite(tabFolder, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
		sc.setExpandHorizontal(true);
	    sc.setExpandVertical(true);
		
		TabItem tbtmDescription = new TabItem(tabFolder, SWT.NONE);
		tbtmDescription.setText("Descri\u00E7\u00E3o");
		
		ScrolledComposite scrolledComposite = new ScrolledComposite(tabFolder, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		tbtmDescription.setControl(scrolledComposite);
		formToolkit.paintBordersFor(scrolledComposite);
		scrolledComposite.setExpandHorizontal(true);
		scrolledComposite.setExpandVertical(true);
		
		Composite composite_3 = new Composite(scrolledComposite, SWT.NONE);
		formToolkit.adapt(composite_3);
		formToolkit.paintBordersFor(composite_3);
		composite_3.setLayout(null);
		
		Label lblDescription = new Label(composite_3, SWT.NONE);
		lblDescription.setBounds(10, 10, 102, 25);
		lblDescription.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
		lblDescription.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
		formToolkit.adapt(lblDescription, true, true);
		lblDescription.setText("Descri\u00E7\u00E3o");
		
		Label lblVocTemUma = new Label(composite_3, SWT.NONE);
		lblVocTemUma.setText("Voc\u00EA tem uma classe realizando trabalho que deveria ser feito por dois.\r\nCrie uma nova classe e mova os campos relevantes da classe antiga para a nova classe.");
		lblVocTemUma.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.NORMAL));
		lblVocTemUma.setAlignment(SWT.CENTER);
		lblVocTemUma.setBounds(118, 66, 602, 48);
		formToolkit.adapt(lblVocTemUma, true, true);
		
		Label label_1 = new Label(composite_3, SWT.NONE);
		label_1.setText("Motiva\u00E7\u00E3o");
		label_1.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
		label_1.setBounds(10, 145, 98, 25);
		formToolkit.adapt(label_1, true, true);
		
		StyledText styledText_1 = new StyledText(composite_3, SWT.READ_ONLY | SWT.WRAP);
		styledText_1.setText("\t\tVoc\u00EA provavelmente ouviu que uma classe deveria ser uma abstra\u00E7\u00E3o pura, lidar com poucas responsabilidades, ou alguma diretriz similar. Na pr\u00E1tica, classes crescem. Voc\u00EA adiciona algumas opera\u00E7\u00F5es aqui, um pouco de dados ali. Voc\u00EA adiciona uma responsabilidade a uma classe sentindo que n\u00E3o vale a pena uma classe separada, mas a medida que a responsabilidade cresce e se reproduz, a classe se torna muito complicada. Em breve sua classe est\u00E1 t\u00E3o pura quanto um pato de micro-ondas.");
		styledText_1.setJustify(true);
		styledText_1.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.NORMAL));
		styledText_1.setEnabled(false);
		styledText_1.setDoubleClickEnabled(false);
		styledText_1.setBounds(29, 192, 803, 114);
		formToolkit.adapt(styledText_1);
		formToolkit.paintBordersFor(styledText_1);
		
		StyledText styledText = new StyledText(composite_3, SWT.READ_ONLY | SWT.WRAP);
		styledText.setText("\t\tUma classe desse tipo possui muitos m\u00E9todos a muitos dados. Uma classe que \u00E9 muito grande n\u00E3o \u00E9 f\u00E1cil de entender. Voc\u00EA precisa considerar onde ela pode ser dividida, e divid\u00ED-la. Um bom sinal \u00E9 que um subconjunto dos dados e um subconjunto dos m\u00E9todos parecem se encaixar. Outros bons sinais s\u00E3o subconjuntos de dados que normalmente mudam juntos ou s\u00E3o particularmente dependentes um do outro. Um teste \u00FAtil \u00E9 perguntar a voc\u00EA mesmo o que aconteceria se voc\u00EA removesse uma parte dos dados ou um m\u00E9todo. Que campos ou m\u00E9todos se tornariam sem sentido?");
		styledText.setJustify(true);
		styledText.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.NORMAL));
		styledText.setEnabled(false);
		styledText.setDoubleClickEnabled(false);
		styledText.setBounds(29, 313, 803, 135);
		formToolkit.adapt(styledText);
		formToolkit.paintBordersFor(styledText);
		
		StyledText styledText_2 = new StyledText(composite_3, SWT.READ_ONLY | SWT.WRAP);
		styledText_2.setText("\t\tUm sinal que normalmente surge depois no desenvolvimento \u00E9 a forma que a classe \u00E9 subtipada. Voc\u00EA pode descobrir que subtipagem afeta apenas algumas funcionalidades ou que algumas funcionalidades precisam ser subtipadas de uma forma e outras funcionalidades de uma maneira diferente.");
		styledText_2.setJustify(true);
		styledText_2.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.NORMAL));
		styledText_2.setEnabled(false);
		styledText_2.setDoubleClickEnabled(false);
		styledText_2.setBounds(29, 460, 803, 89);
		formToolkit.adapt(styledText_2);
		formToolkit.paintBordersFor(styledText_2);
		scrolledComposite.setContent(composite_3);
		scrolledComposite.setMinSize(composite_3.computeSize(SWT.DEFAULT, SWT.DEFAULT));
		
		TabItem tbtmUsage = new TabItem(tabFolder, SWT.NONE);
		tbtmUsage.setText("Exemplo");
		
		ScrolledComposite scrolledComposite_1 = new ScrolledComposite(tabFolder, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		tbtmUsage.setControl(scrolledComposite_1);
		formToolkit.paintBordersFor(scrolledComposite_1);
		scrolledComposite_1.setExpandHorizontal(true);
		scrolledComposite_1.setExpandVertical(true);
		
		Composite composite = new Composite(scrolledComposite_1, SWT.NONE);
		formToolkit.adapt(composite);
		formToolkit.paintBordersFor(composite);
		
		Label label = new Label(composite, SWT.NONE);
		label.setImage(ResourceManager.getPluginImage("RefactorTips", "images/refactor/extractClass/extractClassSample1.1.png"));
		label.setBounds(83, 152, 175, 150);
		formToolkit.adapt(label, true, true);
		
		Label label_2 = new Label(composite, SWT.NONE);
		label_2.setImage(ResourceManager.getPluginImage("RefactorTips", "images/rightPointer.png"));
		label_2.setBounds(285, 207, 66, 36);
		formToolkit.adapt(label_2, true, true);
		
		Label label_3 = new Label(composite, SWT.NONE);
		label_3.setImage(ResourceManager.getPluginImage("RefactorTips", "images/refactor/extractClass/extractClassSample1.2.png"));
		label_3.setBounds(373, 100, 175, 258);
		formToolkit.adapt(label_3, true, true);
		scrolledComposite_1.setContent(composite);
		scrolledComposite_1.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
		
		TabItem tbtmVideo = new TabItem(tabFolder, SWT.NONE);
		tbtmVideo.setText("Video");
		
		Browser browser = new Browser(tabFolder, SWT.NONE);
		browser.setUrl("www.youtube.com/embed/wwFsJX6W_Mc");
		tbtmVideo.setControl(browser);
		formToolkit.paintBordersFor(browser);
	}
}
